package service

import (
	"gitee.com/ysl729895/go-mall/internal/model"
	"gitee.com/ysl729895/go-mall/internal/repository"
)

// UserRoleService 用户-角色业务逻辑接口，定义用户分配角色、查询用户角色等操作
// 便于 controller 层调用，实现解耦
type UserRoleService interface {
	// AssignRoleToUser 给用户分配角色
	AssignRoleToUser(userID, roleID uint) error
	// RemoveRolesFromUser 移除用户所有角色
	RemoveRolesFromUser(userID uint) error
	// GetRolesByUserID 查询用户所有角色
	GetRolesByUserID(userID uint) ([]model.Role, error)
}

// userRoleService 用户-角色业务逻辑实现结构体
// 依赖 UserRoleRepository

type userRoleService struct {
	repo repository.UserRoleRepository
}

// NewUserRoleService 构造函数，注入 UserRoleRepository
func NewUserRoleService(repo repository.UserRoleRepository) UserRoleService {
	return &userRoleService{repo: repo}
}

// AssignRoleToUser 给用户分配角色
func (s *userRoleService) AssignRoleToUser(userID, roleID uint) error {
	userRole := &model.UserRole{UserID: userID, RoleID: roleID}
	return s.repo.Create(userRole)
}

// RemoveRolesFromUser 移除用户所有角色
func (s *userRoleService) RemoveRolesFromUser(userID uint) error {
	return s.repo.DeleteByUserID(userID)
}

// GetRolesByUserID 查询用户所有角色
func (s *userRoleService) GetRolesByUserID(userID uint) ([]model.Role, error) {
	return s.repo.GetRolesByUserID(userID)
}
